package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.UserAdministrationDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.entity.Result;
import com.itheima.pojo.Member;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import com.itheima.service.UserAdministrationService;
import com.itheima.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service(interfaceClass = UserAdministrationService.class)
@Transactional
public class UserAdministrationServiceImpl implements UserAdministrationService {

    @Autowired
    private UserAdministrationDao userAdministrationDao;

    //分页查询   查询所有用户信息
    @Override
    public PageResult findPage(QueryPageBean queryPageBean)  {

        //调用工具类进行实现分页  这个工具类是Mbatis实现的分页 传入当前页和一页多少条数
        PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());
        //调用Dao层根据用户指定传入的条件进行查询
        Page<User> page = userAdministrationDao.findPage(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(),page.getResult());
    }


    //查询所有角色信息回显数据
    @Override
    public List<Role> findAll() {

       return userAdministrationDao.findAll();

    }


    //添加用户 或 修改用户
    @Override
    public Result add(User user, Integer[] checkgroupIds) {
        //根据用户id进行查询对应用户
        User user1 = userAdministrationDao.allUser(user.getId());
        if(user1 == null){
            try {
                //后台校验手机号是否重复
                User user2 = userAdministrationDao.verifynumber(user.getTelephone());
                if(user2 != null){
                    return new Result(false,"手机号重复使用,请更换手机号");
                }
                //先进行添加用户并获取主键id
                userAdministrationDao.addUser(user);
                //获取用户主键id
                Integer userId = user.getId();
                //调用添加用户的公用方法
                this.addUserConnectRole(userId,checkgroupIds);
                return new Result(true,"用户添加成功");
            } catch (Exception e) {
                e.printStackTrace();
                return new Result(false,"用户添加失败");
            }

        }else{
            try {
                //后台校验手机号是否重复
                User user2 = userAdministrationDao.verifynumber(user.getTelephone());
                if(user2 != null && user2.getId() != user.getId()){
                    return new Result(false,"手机号重复使用,请更换手机号");
                }
                /*修改用户*/
                userAdministrationDao.amendUser(user);
                //根据用户id删除中间表对应角色
                userAdministrationDao.deleteRole(user.getId());
                //根据用户id添加中间表对应角色 调用公共方法进行添加
                this.addUserConnectRole(user.getId(),checkgroupIds);
                return new Result(true,"用户修改成功");
            } catch (Exception e) {
                e.printStackTrace();
                return new Result(false,"用户修改失败");
            }
        }









    }

    //删除用户
    @Override
    public Result deleteUser(Integer id) {
        //根据用户id删除用户关联角色的中间表
        try {
            userAdministrationDao.deleteMiddle(id);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,"中间表删除失败");
        }
        //根据用户id删除对应id用户
        try {
            userAdministrationDao.deleteUser(id);
            return new Result(true,"删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,"删除失败");
        }

    }

    //查询用户信息回显
    @Override
    public User echoCompile(Integer id) {
        User user = userAdministrationDao.echoCompile(id);
        return user;
    }

    //查询角色信息回显
    @Override
    public Integer[] echoRole(Integer id) {
       Integer[] integers  = userAdministrationDao.echoRole(id);
        return integers;
    }


    //添加用户公共方法
    public void addUserConnectRole(Integer userId ,Integer[] checkgroupIds){
        //遍历角色id数组 获取每一个角色的id
        for (Integer id : checkgroupIds) {
            //创建一个Map集合将 用户id 和 遍历的每一个角色id放进去
            Map map = new HashMap();
            map.put("userId",userId);
            map.put("checkgroupId",id);
            userAdministrationDao.addUserConnectRole(map);
    }

    }


}
